home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / Tools / ANIPLAY.209 / DRIVER / PSOUND / PSOUNDC.S < prev    next >
Encoding:
Text File  |  1998-02-21  |  3.1 KB  |  171 lines

  1.  
  2.  ILABEL TOS.Q
  3.  
  4. INC EQU ADDQ #1,
  5. DEC EQU SUBQ #1,
  6.  
  7. MEMVALID EQU $420
  8. RESVALID EQU $426
  9. RESVECTOR EQU $42A
  10. _COOKIE EQU $5A0
  11.  
  12. DEBUT:MOVE.L 4(SP),A5 ;Début de la basepage
  13.  MOVE.L $C(A5),D0
  14.  ADD.L $14(A5),D0
  15.  ADD.L $1C(A5),D0
  16.  ADD.L #256,D0
  17.  SETBLOCK D0,(A5)
  18.  MOVE.L #"PSND",D0
  19.  BSR INIT_COOKIE;crée cookie-jar
  20.  BMI.S \1;erreur
  21.  MOVE.L #"_SND",D0
  22.  BSR GET_COOKIE
  23.  BMI.S \2
  24.  MOVE.L D0,A0
  25.  CLR.L (A0)
  26. \2:KEEPPROC #0,#FIN-DEBUT+$200;programme résidant
  27. \1:TERM
  28.  RTS
  29.  
  30. INIT_COOKIE:;nom dans D0.L
  31. ;retourne le pointeur sur donnée cookie dans D0 ou < 0 si erreur
  32.  
  33.  MOVEM.L D1-A1/A6,-(SP)
  34.  MOVE.L D0,D7
  35.  BSR GET_COOKIE
  36.  BPL \1;existe déja
  37.  SUB.L A6,A6
  38.  SUPER 1
  39.  TST.L D0
  40.  BMI.S \8;mode superviseur
  41.  SUPER 0
  42.  MOVE.L D0,A6;sauve SSP
  43. \8:MOVE.L _COOKIE,D0
  44.  BEQ \2;le Cookie Jar n'existe pas TOS < 1.6
  45.  MOVE.L D0,A0
  46.  MOVEQ #1,D0;compteur nombre de cookies
  47. \3:TST.L (A0)
  48.   BEQ.S \4;dernier cookie
  49.   ADDQ #8,A0
  50.   INC D0
  51.  BRA.S \3
  52. \4:CMP.L 4(A0),D0
  53.  BCC.S \5;plus de place
  54.  CLR.L 8(A0);id dernier cookie
  55.  MOVE.L 4(A0),12(A0);déplace data dernier cookie (nombre max de cookie)
  56.  MOVE.L D7,(A0)+;installe nouveau cookie
  57.  MOVE.L A0,D7
  58.  CLR.L (A0);contenu initialisé à 0
  59.  BRA \9
  60. \5:MOVE.L 4(A0),D1;taille
  61.  BEQ \10;erreur
  62.  MOVE.L D1,D2
  63.  ASL.L #4,D2;double la taille (en octets)
  64.  MOVE.L D2,D0
  65.  BSR MALLOC_D0
  66.  BMI \10;erreur
  67.  MOVE.L _COOKIE,A0
  68.  MOVE.L D0,A1
  69.  MOVE.L D1,D2
  70.  ADD.L D1,D1
  71.  SUBQ.L #2,D2;recopie
  72.  BMI.S \7
  73. \6:MOVE.L (A0)+,(A1)+;id
  74.   MOVE.L (A0)+,(A1)+;contenu
  75.  SUBQ.L #1,D2
  76.  BPL.S \6
  77.  BRA.S \7
  78. \2:MOVEQ #64,D0
  79.  BSR MALLOC_D0;réserve la place pour 8 cookie si le Cookie Jar n'existe pas
  80.  BMI.S \10;erreur
  81.  MOVE.L D0,_COOKIE
  82.  LEA DET_RESET,A0
  83.  MOVE.L RESVECTOR,-4(A0)
  84.  MOVE.L RESVALID,SAUVE_RESVALID
  85.  MOVE.L A0,RESVECTOR;détourne reset pour raz vecteur Cookie Jar
  86.  MOVE.L #$31415926,RESVALID
  87.  MOVE.L D0,A1
  88.  MOVEQ #8,D1
  89. \7:MOVE.L D7,(A1)+;installe nouveau cookie
  90.  MOVE.L A1,D7
  91.  CLR.L (A1)+;contenu initialisé à 0
  92.  CLR.L (A1)+;id dernier cookie
  93.  MOVE.L D1,(A1);taille
  94.  BRA.S \9
  95. \10:MOVEQ #-1,D7;erreur
  96. \9:MOVE.L A6,D0
  97.  BEQ.S \11
  98.  SUPER (A6)
  99. \11:MOVE.L D7,D0
  100. \1:MOVEM.L (SP)+,D1-A1/A6
  101.  RTS
  102.  
  103. GET_COOKIE:;nom dans D0.L, au retour si < 0 pas de cookie
  104. ;retourne le pointeur sur donnée cookie dans D0
  105.  
  106.  MOVEM.L D1-A1/A6,-(SP)
  107.  MOVE.L D0,D6
  108.  SUB.L A6,A6
  109.  SUPER 1
  110.  TST.L D0
  111.  BMI.S \5;mode superviseur
  112.  SUPER 0
  113.  MOVE.L D0,A6;sauve SSP
  114. \5:MOVEQ #0,D7
  115.  MOVE.L _COOKIE,D0
  116.  BEQ.S \1
  117.  MOVE.L D0,A0
  118. \2:TST.L (A0)
  119.   BEQ.S \1
  120.   CMP.L (A0),D6
  121.   BNE.S \3
  122.   MOVE.L A0,D7
  123.   ADDQ #4,D7
  124.   BRA.S \1
  125. \3:ADDQ #8,A0
  126.  BRA.S \2
  127. \1:MOVE.L A6,D0
  128.  BEQ.S \4
  129.  SUPER (A6)
  130. \4:MOVEQ #-1,D6
  131.  MOVE.L D7,D0
  132.  BEQ.S \6
  133.  MOVEQ #0,D6
  134. \6:TST D6
  135.  MOVEM.L (SP)+,D1-A1/A6
  136.  RTS
  137.  
  138.  DC.L "XBRA"
  139.  DC.L "PSND"
  140.  DC.L 0;adresse de retour
  141.  
  142. DET_RESET:
  143.  
  144.  CLR.L _COOKIE;vecteur Cookie Jar
  145.  MOVE.L SAUVE_RESVALID,RESVALID
  146.  MOVE.L DET_RESET-4,RESVECTOR
  147.  JMP (A6)
  148.  
  149. MALLOC_D0:
  150.  
  151.  MOVE.L A0,-(SP)
  152.  MOVE.L D0,-(SP)
  153.  MALLOC #-1
  154.  MOVE.L (SP)+,A0
  155.  CMP.L D0,A0
  156.  BCS.S \1
  157. \3:MOVEQ #-39,D0
  158.  BRA.S \2
  159. \1:MALLOC A0
  160.  TST.L D0
  161.  BLE.S \3
  162. \2:MOVE.L (SP)+,A0
  163.  TST.L D0
  164.  RTS
  165.  
  166.  BSS
  167. SAUVE_RESVALID:DS.L 1
  168.  
  169. FIN:
  170.  END